package Alog;

import java.util.Scanner;
/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2022/10/
 */

public class Main{
    static int n,m;
    static int MAX_VALUE =9999999;
    static double[][] distance =new double[101][101]; //记录两个顶点间的距离
    static int[] marked =new int[31];           //判断该顶点是否被访问过
    static double[] min=new double[31];         //记录与每个节点相连的所有路径长度
    public static double prim() {
        int p=0;
        double temp,result = 0; //result为最后的最短路径长度，minl为中间变量，用来记录最短路径
        //初始化visited
        for(int i=0;i<m;i++)
            marked[i]=0;
        //给定最短路径一个初始值，这个初始值是与1相连的所有路径
        for(int i=0;i<m;i++)
            min[i]= distance[p][i];
        //将节点1标记为已访问过的节点
        marked[p]=1;
        for(int i=1;i<m;i++) {
            temp= MAX_VALUE;
            p=-1;
            for(int j=0;j<m;j++) {
                //如果该节点未被访问并且路径长度比最短路径小，修改最短路径，记录该点，下一次循环时从该点开始查找
                if(marked[j]==0&&min[j]<temp) {
                    temp=min[j];
                    p=j;
                }
            }
            if(p==-1)
                return -1;
            marked[p]=1;
            result+=temp;
            //记录与此时节点相连的所有路径
            for(int j=0;j<m;j++) {
                if(marked[j]==0&&min[j]> distance[p][j])
                    min[j]= distance[p][j];
            }
        }
        return result;

    }
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        double len,f;
        node[] nd=new node[31];
        int[][] a=new int[31][31];
        String[] s=new String[4];
        n=in.nextInt();
        while(n!=0) {
            m=in.nextInt();
            s=in.nextLine().split(" ");
            for(int i=0;i<m;i++) {
                s=in.nextLine().split(" ");
                for(int j=0;j<s.length;j++) {
                    a[i][j]=Integer.parseInt(s[j]);
                }
                nd[i]=new node();         //初始化必须做
                nd[i].x=a[i][0];
                nd[i].y=a[i][1];
                nd[i].z=a[i][2];
            }
            //初始化map
            for(int i=0;i<m;i++) {
                for(int j=0;j<m;j++) {
                    distance[i][j]= MAX_VALUE;
                }
            }
            //计算每个路径长度
            for(int i=0;i<m;i++) {
                for(int j=i+1;j<m;j++) {
                    len=Math.sqrt((nd[i].x-nd[j].x)*(nd[i].x-nd[j].x)+(nd[i].y-nd[j].y)*(nd[i].y-nd[j].y)+
                            (nd[i].z-nd[j].z)*(nd[i].z-nd[j].z));
                    distance[i][j]= distance[j][i]=len;
                }
            }
            f=prim();
            System.out.printf("%.2f\n",f);
            n--;
        }
    }
}


class node{
    int x;
    int y;
    int z;
}